angular.module('starter.service', [])
.factory('GameData',function(){
	var data =[
		[{d:0,v: false},{d:2,v: true },{d:0,v: false},{d:0,v: false}],
		[{d:0,v: false},{d:0,v: false},{d:0,v: false},{d:0,v: false}],
		[{d:0,v: false},{d:2,v: true},{d:0,v: false},{d:0,v: false}],
		[{d:0,v: false},{d:0,v: false},{d:0,v: false},{d:2,v: true }]
	];
	var _down = function(){
		var tmp;
		for(var t=4;t>0;t--){
			for(var j=0;j<=2;j++){
				for(var i=0;i<=3;i++){
					if(data[j][i].d!=0 && 0==data[j+1][i].d){
						tmp = data[j+1][i];
						data[j+1][i] = data[j][i];
						data[j][i] = tmp;
						//console.log("data["+j+"]["+i+"]= ",data[j][i])
					}
				}
			}
		}
	}
	var _up = function(){
		var tmp;
		for(var t=4;t>0;t--){
			for(var j=0;j<=2;j++){
				for(var i=0;i<=3;i++){
					if(data[j][i].d==0 && 0!=data[j+1][i].d){
						tmp = data[j][i];
						data[j][i] = data[j+1][i];
						data[j+1][i] = tmp;
					}
				}
			}
		}
	}
	var _left = function(){
		var tmp;
		for(var t=4;t>0;t--){
			for(var j=0;j<=3;j++){
				for(var i=0;i<=2;i++){
					if(data[j][i].d==0 && 0!=data[j][i+1].d){
						tmp = data[j][i+1];
						data[j][i+1] = data[j][i];
						data[j][i] = tmp;
					}
				}
			}
		}
	}
	var _right = function(){
		var tmp;
		for(var t=4;t>0;t--){
			for(var j=0;j<=3;j++){
				for(var i=0;i<=2;i++){
					if(data[j][i].d!=0 && 0==data[j][i+1].d){
						tmp = data[j][i];
						data[j][i] = data[j][i+1];
						data[j][i+1] = tmp;
					}
				}
			}
		}
	}

	var dealDown = function(){
		_down();

	  for(var j=0;j<=2;j++){
		for(var i=0;i<=3;i++){
			if(data[j][i].d!=0 && data[j][i].d==data[j+1][i].d){
				data[j+1][i].d *=2;
				data[j][i] = {d: 0,v: false}
				break;
			}
		}
	  }
		// console.log(data[2][1]);
		//return data;

	}
	var dealUp = function(){
		_up();
		for(var j=0;j<=2;j++){
			for(var i=0;i<=3;i++){
				if(data[j+1][i].d!=0 && data[j][i].d==data[j+1][i].d){
					data[j][i].d *=2;
					data[j+1][i] = {d: 0,v: false}
					break;
				}
			}
		}
	}
	var dealRight = function(){
		_right();
		for(var j=0;j<=3;j++){
			for(var i=0;i<=2;i++){
				if(data[j][i].d!=0 && data[j][i].d==data[j][i+1].d){
					data[j][i+1].d *=2;
					data[j][i] = {d: 0,v: false}
					break;
				}
			}
		}

	}
	var dealLeft = function(){
		_left();
		for(var j=0;j<=3;j++){
			for(var i=0;i<=2;i++){
				if(data[j][i+1].d!=0 && data[j][i].d==data[j][i+1].d){
					data[j][i].d *=2;
					data[j][i+1] = {d: 0,v: false}
					break;
				}
			}
		}

	}
	var clearData = function(){
		data =[
			[{d:0,v: false},{d:2,v: true },{d:0,v: false},{d:0,v: false}],
			[{d:0,v: false},{d:0,v: false},{d:0,v: false},{d:0,v: false}],
			[{d:0,v: false},{d:2,v: true},{d:0,v: false},{d:0,v: false}],
			[{d:0,v: false},{d:0,v: false},{d:0,v: false},{d:2,v: true }]
		];
	}
	var getData = function(){
		return data;
	}
	return {
		og: data,
		down: dealDown,
		up: dealUp,
		Left: dealLeft,
		Right: dealRight,
		reset: clearData
	}
});
